package com.clear.proxy.dynamicProxy.jdk;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

public class Main {
    public static void main(String[] args) {
        // jdk提供的代理实现，只要是使用Proxy类来完成
        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
        Class[] interfaces = new Class[]{DataQuery.class};
        InvocationHandler invocationHandler = new CacheInvocationHandler();
        /**
         * 参数一：loader 被代理类的类加载器
         * 参数二：代理类需要实现的接口数组
         * 参数三： invocationHandler
         */
        DataQuery dataQuery = (DataQuery) Proxy.newProxyInstance(
                classLoader, interfaces, invocationHandler);

        // 事实上调用query方法的时候，他是调用了invoke
        System.out.println(dataQuery.query("key1"));
        System.out.println("--------------------");
        System.out.println(dataQuery.query("key1"));
        System.out.println("--------------------");
        System.out.println(dataQuery.query("key2"));

        System.out.println("==============================");
        System.out.println(dataQuery.queryAll("key1"));
        System.out.println("--------------------");
        System.out.println(dataQuery.queryAll("key1"));
        System.out.println("--------------------");
        System.out.println(dataQuery.queryAll("key2"));
    }
}
